package com.nep.NEPS.controller;

import com.nep.common.util.ApplicationContextUtil;
import com.nep.common.util.SceneSwitcherUtil;
import com.nep.common.service.UserService;
import com.nep.common.service.UserServiceImpl;
import com.nep.entity.supervisor.User;
import javafx.fxml.FXML;
import javafx.scene.control.ComboBox;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

import java.util.logging.Level;
import java.util.logging.Logger;

import static com.nep.common.util.AlertUtil.*;

/**
 * 监督员注册控制器
 * 负责处理公众监督员的注册流程，包括表单验证、用户数据创建和注册逻辑
 */
public class SupervisorRegisterViewController {
    @FXML private TextField phoneField;         // 手机号输入框（作为用户唯一标识）
    @FXML private PasswordField passwordField;  // 密码输入框
    @FXML private PasswordField confirmPasswordField; // 确认密码输入框
    @FXML private TextField nameField;          // 真实姓名输入框
    @FXML private TextField ageField;           // 年龄输入框
    @FXML private ComboBox<String> genderComboBox; // 性别选择下拉框

    private static final Logger LOGGER = Logger.getLogger(SupervisorRegisterViewController.class.getName());
    private final UserService userService = new UserServiceImpl(); // 用户服务实例，用于注册逻辑

    /**
     * 处理注册按钮点击事件
     * 执行表单数据验证、用户对象创建及注册服务调用
     */
    @FXML
    private void handleRegister() {
        // 获取表单输入数据
        String phone = phoneField.getText();
        String password = passwordField.getText();
        String confirmPassword = confirmPasswordField.getText();
        String name = nameField.getText();
        String ageText = ageField.getText();
        String gender = genderComboBox.getValue();

        // 手机号格式验证（仅允许数字）
        if (!phone.matches("\\d+")) {
            showError("注册失败", "手机号必须为数字格式");
            return;
        }

        // 年龄格式验证（仅允许数字）
        if (!ageText.matches("\\d+")) {
            showError("注册失败", "年龄必须为数字格式");
            return;
        }

        // 密码长度验证（至少8位）
        if (password.length() < 8) {
            showError("注册失败", "密码长度不能少于8位");
            return;
        }

        // 表单完整性验证（非空检查）
        if (phone.isEmpty() || password.isEmpty() || confirmPassword.isEmpty()
                || name.isEmpty() || ageText.isEmpty() || gender == null) {
            showError("注册失败", "请填写所有必填字段：手机号、密码、确认密码、姓名、年龄、性别");
            return;
        }

        // 密码一致性验证
        if (!password.equals(confirmPassword)) {
            showError("注册失败", "两次输入的密码不一致，请重新输入");
            return;
        }

        // 创建用户对象并填充表单数据
        User user = new User();
        user.setPhone(phone);         // 设置手机号（唯一标识）
        user.setPassword(password);   // 设置登录密码
        user.setRealName(name);       // 设置真实姓名
        user.setAge(ageText);         // 设置年龄
        user.setGender(gender);       // 设置性别

        // 调用用户服务完成注册
        if (userService.register(user)) {
            LOGGER.log(Level.INFO, "用户注册成功，手机号：" + user.getPhone());
            showInfo("注册成功", "恭喜您成功注册为公众监督员！");
            handleBack(); // 注册成功后返回登录页面
        } else {
            LOGGER.log(Level.SEVERE, "用户注册失败，手机号：" + user.getPhone());
            showError("注册失败", "该手机号已被注册或系统异常，请稍后重试");
        }
    }

    /**
     * 处理返回按钮点击事件
     * 导航回监督员登录页面
     */
    @FXML
    private void handleBack() {
        try {
            // 获取应用主舞台并切换场景
            Stage primaryStage = ApplicationContextUtil.getInstance().getPrimaryStage();
            SceneSwitcherUtil.switchScene(primaryStage, "/com/nep/NEPS/view/SupervisorLoginView.fxml");
        } catch (RuntimeException e) {
            LOGGER.log(Level.SEVERE, "场景切换失败", e);
            showError("系统错误", "场景切换失败：" + e.getMessage());
        }
    }
}